package com.irssproject.app.web.action.main;


import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import org.apache.struts2.interceptor.SessionAware;

import com.irssproject.app.bean.lectorRSS.Etiqueta;
import com.irssproject.app.bean.main.Usuari;
import com.irssproject.app.service.lectorRSS.iface.SubscripcioService;
import com.irssproject.app.service.main.iface.UsuariService;
import com.irssproject.app.utils.Constants;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements SessionAware, ModelDriven{

	/**
	 * 
	 */
	private static final long serialVersionUID = 8890481402065068304L;
	Logger logger = Logger.getLogger(LoginAction.class.getName());
	private Usuari usuari = new Usuari();
	
	private Map<String,Object> session;
	
	private List<Etiqueta> listEtiquetes;
	UsuariService usuariService;
	SubscripcioService subscripcioService;
	
	public LoginAction (UsuariService usuariService, SubscripcioService subscripcioService)
	{
		this.usuariService = usuariService;
		this.subscripcioService = subscripcioService;
	}

	public Object getModel(){
		return usuari;
	}

	public Map<String,Object> getSession() {
		return session;
	}

	public void setSession(Map<String,Object> arg0) {
		session=arg0;
	}
	
	
	public String initPage(){
	
		return SUCCESS;
	}
	
	public String login(){

		
		if ("".equals(usuari.getLogin()) || "".equals(usuari.getPassword())){
			addActionError(getText("error.loginaction.esbuit"));
			return INPUT;
		}
		
		session = ActionContext.getContext().getSession();

		//Autenticacio usuari amb login i password contra la BD
		try {
			Usuari usuariAut = usuariService.login(usuari.getLogin(),usuari.getPassword());
			session.put(Constants.SESSIO_USUARI_AUTENTICAT, usuariAut);
			return SUCCESS;

		} catch (Exception e) {
			addActionError(getText("error.loginaction.autenticacio"));
			return INPUT;
		}
		
	}
	
	public String logout(){
		
		session = ActionContext.getContext().getSession();

		session.remove(Constants.SESSIO_USUARI_AUTENTICAT);
		return SUCCESS;

		
	}
	
	public String registreUsuari()
	{
		if ("".equals(usuari.getLogin()) || "".equals(usuari.getPassword()) 
				|| "".equals(usuari.getName()) || "".equals(usuari.getEmail()))
		{
			
			if ("".equals(usuari.getLogin()))
				addActionError(getText("error.esbuit.login"));
			if ("".equals(usuari.getPassword()))
				addActionError(getText("error.esbuit.password"));
			if ("".equals(usuari.getName()))
				addActionError(getText("error.esbuit.nom"));
			if ("".equals(usuari.getEmail()))
				addActionError(getText("error.esbuit.email"));
			
			return INPUT;
		
		}
		else { //les dades requerides estan completes

			try
			{
				usuariService.afegirUsuari(usuari);
				session.put(Constants.SESSIO_USUARI_AUTENTICAT, usuari);
				return SUCCESS;
			}
			catch(Exception e)
			{
				if (e.getMessage().equals(Constants.EXCEPTION_LOGIN_ALREADY_EXISTS))
				{
					addActionError(getText("error.registre.login"));
					return INPUT;
				}
			}
			
			return INPUT;
						
		}
		
	}

	public void setListEtiquetes(List<Etiqueta> listEtiquetes) {
		this.listEtiquetes = listEtiquetes;
	}

	public List<Etiqueta> getListEtiquetes() {
		return listEtiquetes;
	}
}